package com.example.project.service;

import java.util.List;
import java.util.Map;

import com.example.project.entity.Issue;

/**
 * 问题，存储项目中的任务、缺陷等问题Service接口
 * 
 * @author ruoyi
 * @date 2025-09-19
 */
public interface IssueService {

	/**
	 * 通过ID获取问题信息，支持缓存优化 适用于在循环中重复查询同一ID的场景 采用单条记录缓存策略，避免缓存整个问题列表
	 *
	 * @param issueId 问题ID
	 * @return 问题对象，如果不存在返回null
	 */
	Issue getIssueInfoForCache(Long issueId);

	/**
	 * 查询问题，存储项目中的任务、缺陷等问题
	 * 
	 * @param id 问题，存储项目中的任务、缺陷等问题主键
	 * @return 问题，存储项目中的任务、缺陷等问题
	 */
	public Issue selectIssuesById(Long id);

	/**
	 * 查询问题，存储项目中的任务、缺陷等问题列表
	 * 
	 * @param tIssues 问题，存储项目中的任务、缺陷等问题
	 * @return 问题，存储项目中的任务、缺陷等问题集合
	 */
	public List<Issue> selectIssuesList(Issue tIssues);

	/**
	 * 新增问题，存储项目中的任务、缺陷等问题
	 * 
	 * @param tIssues 问题，存储项目中的任务、缺陷等问题
	 * @return 结果
	 */
	public long insertIssues(Issue tIssues);

	/**
	 * 修改问题，存储项目中的任务、缺陷等问题
	 * 
	 * @param tIssues           问题，存储项目中的任务、缺陷等问题
	 * @param uploadedFilesJson
	 * @return 结果
	 */
	public int updateIssues(Issue issues, String uploadedFilesJson);

	/**
	 * 批量删除问题，存储项目中的任务、缺陷等问题
	 * 
	 * @param ids 需要删除的问题，存储项目中的任务、缺陷等问题主键集合
	 * @return 结果
	 */
	public int deleteIssuesByIds(String ids);

	/**
	 * 删除问题，存储项目中的任务、缺陷等问题信息
	 * 
	 * @param id 问题，存储项目中的任务、缺陷等问题主键
	 * @return 结果
	 */
	public int deleteIssuesById(Long id);

	/**
	 * 将Issues转换为IssuesInfo
	 */
	Issue convertToIssuesInfo(Issue issue);

	public List<Issue> findListByAssignedToIdOrderByTimeDesc(Long userId);

	/**
	 * 根据条件查询问题列表
	 * 
	 * @param issue 查询条件
	 * @return 问题列表
	 */
	public List<Issue> findListByCondition(Issue issue);

	public long getCount(Issue issue);

	/**
	 * 查询当日需求量（按当前日期查询startDate字段）
	 * 
	 * @return 当日需求量
	 */
	public long getTodayCount();

	public List<Map<String, Object>> findTotalGroupByProjectId();

	public List<Map<String, Object>> findListGroupByMonth();

	/**
	 * 根据条件查询问题列表，限制数量
	 * 
	 * @param issue 查询条件
	 * @param limit 限制数量
	 * @return 问题列表
	 */
	public List<Issue> findListByConditionWithLimit(Issue issue, int limit);

	/**
	 * 将Issues转换为IssuesInfo
	 */
	List<Issue> convertToIssuesList(List<Issue> issue);

	public List<Map<String, Object>> selectIssueStatusTotal();

	public int setupAssignedToId(Issue issue, Long userId, Long statusId);

}
